# @Timer:2022/3/25
# @作者:meng
# @文件名:异常.py

#错误：语句错误、逻辑错误、系统错误
#异常：程序执行的时候出现的未知错误、语法和逻辑是正常的、程序业务逻辑不完善引起的程序漏洞
#常见异常：除零异常、值异常、导入异常、名称异常、索引异常、键异常、属性异常
#区别:错误通常指语句错误、逻辑错误等，人为可以避免，而异常不容易捕获，需要捕获
def dev1(a,b):
    return a / b

# print(dev1(2,1))

list1 = [1,2,3]
# print(dev1(1,0))
#1、对异常的处理
# try:
#     print(dev1(1/0))
# except:
#     print("异常")
#2、对异常返回的值处理
# try:
#     print(dev1(1,0))
# except ZeroDivisionError as e:
#     print(e)
#     print("异常")
#3、2个异常返回值的处理
# try:
#     print(dev1(1,1))
#     print(list1[4])
# except ZeroDivisionError as e:
#     print(e)
# except IndexError as e1:
#     print(e1)
#4、通用异常收集
# try:
#     print(dev1(1,1))
#     print(list1[4])
# except Exception as e:
#     print(e)
#5、兜底处理finnaly
# 如果try异常，顺序执行except，然后执行finally，如果try正常，except不执行，最后还是执行finally
#try：执行代码  except：发生异常执行代码
# try:
#     print(dev1(1,1))
# except Exception as e:
#     print(e)
# finally:
#     print("finally")
#6、没有异常执行代码块else
#try：执行代码  except：发生异常执行代码   else：没有异常执行代码   except和else互斥的
# try:
#     print(dev1(1,1))
# except Exception as e:
#     print(e)
# else:
#     print("没有异常执行代码")
# finally:
#     print("兜底执行finally")

#7、主动抛出异常raise
# def age1(a):
#     if a < 0:
#         raise ValueError(f"age不合理{a}")    #ValueError为python内置异常类
#     else:
#         print("age合理")

# age1(-1)

#8、自定义异常类
class MyException(Exception):
    print("这是个自定义异常")

def age1(a):
    if a < 0:
        raise MyException(f"age不合理{a}")    #ValueError为python内置异常类
    else:
        print("age合理")

age1(-1)